%% @author Final
%% @doc @todo Add description to maxteilsumme1.


-module(maxteilsumme1).

%% ====================================================================
%% API functions
%% ====================================================================
-export([maxTeilsumme1/1]).



%% ====================================================================
%% Internal functions
%% ====================================================================

% initialisierung

maxTeilsumme1(Folge) -> for(Folge,{0,{1,1}},{0,{1,1}}).

% Abbruchbedingung
for([],{Max,{BisInVorn,BisInHinten}},_) -> {Max,{BisInVorn,BisInHinten}};

% Berechnung
% 1 Schleife die das gesamte Maximum und dessen Index erfasst
% 1 Schleife die das Randmaximum berechnet 
for(Folge,{Max,{BisInVorn,BisInHinten}},{RandMax,{RandInVorn,RandInHinten}}) ->
							% Bei negativen Zahlen wird RandMax im rekursursiven Aufruf genullt, da sonst falsche Werte ausgegeben werden
							if (RandMax+hd(Folge)) =< 0 -> for(tl(Folge),{Max,{BisInVorn,BisInHinten}},{0,{RandInHinten+1,RandInHinten+1}});
							   % falls RandMax + Head > als Maximum
							   (RandMax+hd(Folge)) > Max -> for(tl(Folge),{RandMax+hd(Folge),{RandInVorn,RandInHinten}},{RandMax+hd(Folge),{RandInVorn,RandInHinten+1}});
							   % falls RandMax + Head <= Maximum
							   (RandMax+hd(Folge)) =< Max -> for(tl(Folge),{Max,{BisInVorn,BisInHinten}},{RandMax+hd(Folge),{RandInVorn,RandInHinten+1}})
							end.





